package com.knowledge.knowledge_notes.config;

import com.knowledge.knowledge_notes.annotation.ApiRestController;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.*;

import javax.annotation.Resource;

@SpringBootConfiguration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Value("${ftp.folder}")
    private String folder;

    @Resource
    RequestPathProperties requestPathProperties;
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.addPathPrefix(requestPathProperties.getApiPath(), c->c.isAnnotationPresent(ApiRestController.class));
    }

//    @Override
//    public void addCorsMappings(CorsRegistry registry) {
//        //所有请求都允许跨域
//        registry.addMapping("/**")// 配置可以被跨域的路径，可以任意配置，可以具体到直接请求路径。
//                .allowCredentials(true)// 响应头表示是否可以将对请求的响应暴露给页面。返回true则可以，其他值均不可以
//                .allowedOrigins("http://www.zzhmj.com:90")// 允许所有的请求域名访问我们的跨域资源，可以固定单条或者多条内容，如："http://www.baidu.com"，只有百度可以访问我们的跨域资源。
////                .allowedOrigins("http://localhost:8083")
//                .allowedMethods("*")// 允许输入参数的请求方法访问该跨域资源服务器，如：POST、GET、PUT、OPTIONS、DELETE等。
//                .allowedHeaders("*")// 允许所有的请求header访问，可以自定义设置任意请求头信息，如："X-YAUTH-TOKEN"
//                .maxAge(3600);// 配置客户端缓存预检请求的响应的时间（以秒为单位）。默认设置为1800秒（30分钟）。
//    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/api/file/**").addResourceLocations("file:" + folder + "/");
    }

    private CorsConfiguration corsConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
    /* 请求常用的三种配置，*代表允许所有，当时你也可以自定义属性（比如header只能带什么，只能是post方式等等）*/

        corsConfiguration.setAllowCredentials(true);
//        corsConfiguration.addAllowedOrigin("http://www.zzhmj.com:90");
        corsConfiguration.addAllowedOriginPattern("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setMaxAge(3600L);
        return corsConfiguration;
    }
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfig());
        return new CorsFilter(source);
    }
}


